package com.kfm.jdbc.day03;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Demo {

    public static void main(String[] args) {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }

        String url = "jdbc:mysql://localhost:3306/company_info?serverTimezone=UTC";
        String user = "root";
        String pass = "root";

        try {
            // 1. 创建连接对象
            Connection conn = DriverManager.getConnection(url, user, pass);
            // 2. 定义sql语句, 调用存储过程, {}表示占位符 ? 代表参数 call 表示调用存储过程 proc_add 表示存储过程名称
            String sql = "{call proc_add(?, ?, ?)}";
            // 3. 创建语句对象  prepareCall()方法专门用于调用存储过程
            CallableStatement callableStatement = conn.prepareCall(sql);
            // 4. 设置参数, IN 类型的参数, 使用 setXXX()方法， OUT 类型的参数, 使用 registerOutParameter()方法注册
            callableStatement.setInt(1, 11);
            callableStatement.setObject(2, 22);
            callableStatement.registerOutParameter(3, java.sql.Types.INTEGER);

            // 5. 执行语句
            callableStatement.execute();
            // 6. 获取结果
            int result = callableStatement.getInt(3);
            System.out.println(result);
            // 7. 关闭资源
            callableStatement.close();
            conn.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}
